/**
 * 本地存储工具类
 * 基于uni.storage API封装
 */

// 默认过期时间（毫秒）
const DEFAULT_CACHE_TIME = 60 * 60 * 24 * 7 * 1000; // 7天

/**
 * 设置缓存
 * @param {String} key - 缓存键
 * @param {*} value - 缓存值
 * @param {Number} expire - 过期时间（毫秒），默认7天
 */
const set = (key, value, expire = DEFAULT_CACHE_TIME) => {
  const data = {
    value,
    expire: expire !== null ? new Date().getTime() + expire : null
  }
  uni.setStorageSync(key, JSON.stringify(data))
}

/**
 * 获取缓存
 * @param {String} key - 缓存键
 * @param {*} def - 默认值，当缓存不存在或已过期时返回
 * @returns {*} - 缓存值或默认值
 */
const get = (key, def = null) => {
  const data = uni.getStorageSync(key)
  if (!data) return def
  
  try {
    const item = JSON.parse(data)
    
    // 判断是否过期
    if (item.expire && item.expire < new Date().getTime()) {
      remove(key)
      return def
    }
    
    return item.value
  } catch (e) {
    return def
  }
}

/**
 * 移除缓存
 * @param {String} key - 缓存键
 */
const remove = (key) => {
  uni.removeStorageSync(key)
}

/**
 * 清空所有缓存
 */
const clear = () => {
  uni.clearStorageSync()
}

/**
 * 获取缓存信息
 * @returns {Object} - 缓存信息
 */
const info = () => {
  return uni.getStorageInfoSync()
}

/**
 * 判断缓存是否存在且未过期
 * @param {String} key - 缓存键
 * @returns {Boolean} - 是否存在且未过期
 */
const has = (key) => {
  const data = uni.getStorageSync(key)
  if (!data) return false
  
  try {
    const item = JSON.parse(data)
    // 判断是否过期
    if (item.expire && item.expire < new Date().getTime()) {
      remove(key)
      return false
    }
    return true
  } catch (e) {
    return false
  }
}

export default {
  set,
  get,
  remove,
  clear,
  info,
  has
}